package com.hh.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hh.common.DeleteRequest;
import com.hh.entity.domain.Blog;
import com.hh.entity.domain.User;
import com.hh.entity.dto.blog.BlogAddRequest;
import com.hh.entity.dto.blog.BlogQueryRequest;
import com.hh.entity.dto.blog.BlogReviewRequest;
import com.hh.entity.dto.blog.BlogUpdateRequest;
import com.hh.entity.vo.BlogVO;

import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;

/**
 * @author hanhui
 * @description 针对表【Blog】的数据库操作Service
 * @createDate 2025-03-09 13:51:09
 */
public interface BlogService extends IService<Blog> {
    /**
     * 进行博客审核
     *
     * @param blogReviewRequest 博客审核请求
     * @param loginUser 登录用户
     */
    void doBlogReview(BlogReviewRequest blogReviewRequest, User loginUser);

    /**
     * 填充审核参数
     *
     * @param blog 博客
     * @param loginUser 登录用户
     */
    void fillReviewParams(Blog blog, User loginUser);

    /**
     * 添加文章
     *
     * @param BlogAddRequest 添加文章请求
     * @param loginUser 登录用户
     * @return 添加的文章
     */
    Blog addBlog(BlogAddRequest BlogAddRequest, User loginUser);

    /**
     * 更新文章
     *
     * @param BlogUpdateRequest 更新文章请求
     * @param loginUser 登录用户
     */
    void updateBlog(BlogUpdateRequest BlogUpdateRequest, User loginUser);

    /**
     * 删除文章
     *
     * @param deleteRequest 删除请求
     * @param loginUser 登录用户
     */
    Boolean deleteBlog(DeleteRequest deleteRequest, User loginUser);

    /**
     * 获取文章详情
     *
     * @param Blog 博客
     * @return 博客详情视图对象
     */
    BlogVO getBlogVo(Blog Blog);

    /**
     * 获取文章列表
     *
     * @param BlogPage 博客分页对象
     * @param request HTTP请求
     * @return 博客详情视图分页对象
     */
    Page<BlogVO> getBlogVoPage(Page<Blog> BlogPage, HttpServletRequest request);

    /**
     * 获取热门博客列表
     *
     * @param limit 获取数量限制
     * @return 热门博客列表
     */
    List<BlogVO> getHotBlogs(int limit);

    /**
     * 更新博客的热度分数
     *
     * @param BlogId 博客ID
     */
    void updateBlogHotScore(Long BlogId);

    /**
     * 获取查询条件
     *
     * @param BlogQueryRequest 查询请求
     * @return 查询条件包装器
     */
    QueryWrapper<Blog> getQueryWrapper(BlogQueryRequest BlogQueryRequest);


    /**
     * 从 ES 查询
     *
     * @param postQueryRequest
     * @return
     */
    Page<BlogVO> searchFromEs(BlogQueryRequest postQueryRequest);
    /**
     * 获取指定更新时间之后的博客列表
     * @param updateTime 更新时间戳
     * @return 博客列表
     */
    List<Blog> listByUpdateTimeAfter(long updateTime);
    Map<String, Integer> getTabCloud();
}
